@devx-commerce/plugin-loyalty
Version:
A starter for Medusa plugins.
76 lines • 5.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GET = GET;
const error_handler_1 = require("../../../../utils/error-handler");
const response_handler_1 = require("../../../../utils/response-handler");
const loyalty_1 = require("../../../../modules/loyalty");
async function GET(req, res) {
try {
const loyaltyModuleService = req.scope.resolve(loyalty_1.LOYALTY_MODULE);
const customer_id = req.params.id;
// Extract query parameters (already validated by middleware)
const { limit = 10, offset = 0, type, reference_type, sort_by = "created_at", sort_order = "DESC", } = req.query;
// Ensure proper types for pagination
const parsedLimit = Number(limit);
const parsedOffset = Number(offset);
// Build filter object
const filters = {
customer_id: customer_id,
};
if (type) {
filters.type = type;
}
if (reference_type) {
filters.reference_type = reference_type;
}
// Build options object for pagination and sorting
const options = {
take: parsedLimit,
skip: parsedOffset,
order: { [sort_by]: sort_order },
};
// Get transactions with pagination
const transactions = await loyaltyModuleService.listLoyaltyTransactions(filters, options);
// Get total count for pagination metadata
const [_, total] = await loyaltyModuleService.listAndCountLoyaltyTransactions(filters, {
take: 0,
skip: 0,
});
// Get customer points
const points = await loyaltyModuleService.getPoints(customer_id);
// Calculate pagination metadata
const totalPages = Math.ceil(total / parsedLimit);
const currentPage = Math.floor(parsedOffset / parsedLimit) + 1;
const hasNextPage = currentPage < totalPages;
const hasPrevPage = currentPage > 1;
const response = {
data: {
points,
transactions,
customer_id,
},
pagination: {
total,
total_pages: totalPages,
current_page: currentPage,
limit: parsedLimit,
offset: parsedOffset,
has_next_page: hasNextPage,
has_prev_page: hasPrevPage,
next_page: hasNextPage ? currentPage + 1 : null,
prev_page: hasPrevPage ? currentPage - 1 : null,
},
filters: {
type: type || null,
reference_type: reference_type || null,
sort_by: sort_by,
sort_order: sort_order,
},
};
(0, response_handler_1.sendSuccessResponse)(res, response);
}
catch (error) {
(0, error_handler_1.handleError)(error, res);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2xveWFsdHktdHJhbnNhY3Rpb25zL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSxrQkE4RkM7QUFwR0QsbUVBQThEO0FBQzlELHlFQUF5RTtBQUd6RSx5REFBNkQ7QUFFdEQsS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQy9ELElBQUksQ0FBQztRQUNILE1BQU0sb0JBQW9CLEdBQ3hCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHdCQUFjLENBQUMsQ0FBQztRQUVwQyxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUVsQyw2REFBNkQ7UUFDN0QsTUFBTSxFQUNKLEtBQUssR0FBRyxFQUFFLEVBQ1YsTUFBTSxHQUFHLENBQUMsRUFDVixJQUFJLEVBQ0osY0FBYyxFQUNkLE9BQU8sR0FBRyxZQUFZLEVBQ3RCLFVBQVUsR0FBRyxNQUFNLEdBQ3BCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUVkLHFDQUFxQztRQUNyQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBDLHNCQUFzQjtRQUN0QixNQUFNLE9BQU8sR0FBUTtZQUNuQixXQUFXLEVBQUUsV0FBVztTQUN6QixDQUFDO1FBRUYsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQzFDLENBQUM7UUFFRCxrREFBa0Q7UUFDbEQsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJLEVBQUUsV0FBVztZQUNqQixJQUFJLEVBQUUsWUFBWTtZQUNsQixLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQWlCLENBQUMsRUFBRSxVQUE0QixFQUFFO1NBQzdELENBQUM7UUFFRixtQ0FBbUM7UUFDbkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FDckUsT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUFDO1FBRUYsMENBQTBDO1FBQzFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQywrQkFBK0IsQ0FDM0UsT0FBTyxFQUNQO1lBQ0UsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQztTQUNSLENBQ0YsQ0FBQztRQUVGLHNCQUFzQjtRQUN0QixNQUFNLE1BQU0sR0FBRyxNQUFNLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVqRSxnQ0FBZ0M7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sV0FBVyxHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUVwQyxNQUFNLFFBQVEsR0FBRztZQUNmLElBQUksRUFBRTtnQkFDSixNQUFNO2dCQUNOLFlBQVk7Z0JBQ1osV0FBVzthQUNaO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLEtBQUs7Z0JBQ0wsV0FBVyxFQUFFLFVBQVU7Z0JBQ3ZCLFlBQVksRUFBRSxXQUFXO2dCQUN6QixLQUFLLEVBQUUsV0FBVztnQkFDbEIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLGFBQWEsRUFBRSxXQUFXO2dCQUMxQixhQUFhLEVBQUUsV0FBVztnQkFDMUIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDL0MsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTthQUNoRDtZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUk7Z0JBQ2xCLGNBQWMsRUFBRSxjQUFjLElBQUksSUFBSTtnQkFDdEMsT0FBTyxFQUFFLE9BQWlCO2dCQUMxQixVQUFVLEVBQUUsVUFBb0I7YUFDakM7U0FDRixDQUFDO1FBRUYsSUFBQSxzQ0FBbUIsRUFBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFBLDJCQUFXLEVBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7QUFDSCxDQUFDIn0=